package com.ciccwm.auth.dubbo;

import com.ciccwm.auth.model.OAuth2TokenResponse;

/**
 * OAuth2 认证服务 Dubbo 接口
 */
public interface OAuth2DubboService {
    /**
     * 密码模式
     *
     * @param username 用户名
     * @param password 密码
     * @param clientId 客户端ID
     * @param clientSecret 客户端密钥
     * @return 令牌响应
     */
    OAuth2TokenResponse passwordGrant(String username, String password, String clientId, String clientSecret);

    /**
     * 客户端凭证模式
     *
     * @param clientId 客户端ID
     * @param clientSecret 客户端密钥
     * @return 令牌响应
     */
    OAuth2TokenResponse clientCredentialsGrant(String clientId, String clientSecret);

    /**
     * 创建授权码
     *
     * @param clientId 客户端ID
     * @param redirectUri 重定向URI
     * @return 授权码
     */
    String createAuthorizationCode(String clientId, String redirectUri);

    /**
     * 授权码模式
     *
     * @param code 授权码
     * @param clientId 客户端ID
     * @param clientSecret 客户端密钥
     * @param redirectUri 重定向URI
     * @return 令牌响应
     */
    OAuth2TokenResponse authorizationCodeGrant(String code, String clientId, String clientSecret, String redirectUri);

    /**
     * 简化模式
     *
     * @param clientId 客户端ID
     * @return 令牌响应
     */
    OAuth2TokenResponse implicitGrant(String clientId);

    /**
     * 刷新令牌
     *
     * @param refreshToken 刷新令牌
     * @param clientId 客户端ID
     * @param clientSecret 客户端密钥
     * @return 令牌响应
     */
    OAuth2TokenResponse refreshToken(String refreshToken, String clientId, String clientSecret);
} 
